package com.util;

import com.common.ServiceException;

import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Base64;

public class SHA256Util {
    private static final String SHA_256 = "SHA-256";

    private SHA256Util() {
        try {
            MessageDigest.getInstance(SHA_256);
        } catch (NoSuchAlgorithmException e) {
            throw new RuntimeException("SHA-256 not supported.");
        }
    }

    public static String makeHash(String password, String salt) {
        try {
            MessageDigest md = MessageDigest.getInstance(SHA_256);
            md.update(password.getBytes(StandardCharsets.UTF_8));
            byte[] byteData = md.digest(makeHash(salt.toLowerCase()));
            return Base64.getEncoder().encodeToString(byteData);
        } catch (Exception e) {
            //ignore, will never happen.
            throw new ServiceException("100011", "令牌处理错误", e);
        }
    }

    private static byte[] makeHash(String val) throws NoSuchAlgorithmException {
        return MessageDigest.getInstance(SHA_256).digest(val.getBytes(StandardCharsets.UTF_8));
    }
}
